# 创建一个字典 保存人员的信息
dict_a = {
    "jack": [100, 200, 300],
    "mary": (10, 20, "hello"),
    "nono": {"apple", "pear"},
    "smith": "计算机老师",
    "周星驰": {
        "性别": "男",
        "age": 18,
        "地址": "香港"
    }
}
# dict_a:{'jack': [100, 200, 300], 'mary': (10, 20, 'hello'), 'nono': {'pear', 'apple'}, 'smith': '计算机老师', '周星驰': {'性别': '男', 'age': 18, '地址': '香港'}} 类型 ：<class 'dict'>
print(f"dict_a:{dict_a} 类型 ：{type(dict_a)}")
# 字典是不支持索引的

# 3.字典不支持while循环,因为字典不支持索引,所以只能使用for循环
dict_b = {'one': 1, 'two': 2, 'three': 3}
# 使用for循环进行遍历,依次取出key,再通过dict[key]取得对应的值
print("--------遍历方式1--------")
for key in dict_b:
    print(f"key:{key} value : {dict_b[key]}")

print("-------遍历方式2-----------")
# 类型是: <class 'dict_values'>
print("获取字典的所有值 : ", dict_b.values(), "类型是:", type(dict_b.values()))
for value in dict_b.values():
    print(f"value : {value}")

# 遍历方式3 - 依次取出 key - value
print("------遍历方式3---------")
dict_b = {'one': 1, 'two': 2, 'three': 3}
for k, v in dict_b.items():
    print(f"key:{k} value : {v}")

# 创建空字典可以通过 {} , 或者  dict()
dict_c = {}
dict_d = dict()

# dict_c:{}类型:<class 'dict'>
# dict_d:{}类型:<class 'dict'>
print(f"dict_c:{dict_c}类型:{type(dict_c)}")
print(f"dict_d:{dict_d}类型:{type(dict_d)}")

#字典的key必须是唯一的,如果你指定了多个相同的key,后面的键值会覆盖前面的
dict_e = {'one' : 1 , 'two' : 2 , 'three' : 3 , 'two' : 200}
print(f"dict_e:{dict_e}")

#演示字典的常用操作
dict_a = {'one' : 1 , 'two' : 2 , 'three' : 3 , 'two' : 200}
#1 len(d):返回字段d中的项数
print(f"dict_a的元素的个数是:{len(dict_a)}")

#d[key]:返回d中key为键的项目,如果映射中不存在在keyError
print(f"key为three对应的value为{dict_a['three']}")

#3 [key] = value : 将d[key]设置为value,如果key已经存在,则是修改value
#如果key没有存在,则是增加key - value,注意 会直接修改原来的字典
#修改  需求 ： 修改  key = 'one'
dict_a['one'] = '第一'
print(f"dict_a : {dict_a}")

#添加 需求 ： 增加 key 为 'four' , value为4
dict_a['four'] = 4;
print(f"dict_a:{dict_a}")

#4. del d[key] : 将d[key]从d中移除,如果映射中不存在key ,则会引发keyError
#需求 删除 key 为  four的元素
del dict_a['four']
print(f"dict_a:{dict_a}")

#5 pop(key[,default])
#如果key存在于字典中则将其移除并且返回其值,否则返回default
#如果default未给出且key不存在于字典中  ， 则会引发  keyError
#需求：将key为'one'的值返回,并将该元素从字典中移除
val = dict_a.pop('one' , "哈哈")
print(val)
print(f"dict_a:{dict_a}")

#6.keys()： 返回字典的所有的key
dict_a_keys = dict_a.keys()
print(f"dict_keys : {dict_a_keys} 类型为 {type(dict_a_keys)}")

#7 key in d : 如果 d 中 存在键key,则返回true ，否则返回false
#需求：判断字典中是否有 key 'two'
print('two' in dict_a)

# 8.clear() : 移除字典中的所有元素
#需求：将字段清空
dict_a.clear()
print(f"dict_a:{dict_a}")
